package com.zhuhjay.common.web.enums;

import lombok.Getter;

/**
 * 正则匹配模式
 * @author ZhuHJay
 * @date 2023/2/25 13:30
 */
@Getter
public enum MatchingMode {

    /** 常用正则 */
    Email("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$", "邮箱格式不正确"),
    Username("^(?=.*[a-zA-Z0-9].*)(?=.*[a-zA-Z].*)[a-zA-Z0-9]{4,10}$", "用户名为4-10位, 由数字和字母组成(不可包含特殊符号)"),
    NikeName("^[a-zA-Z\\u4e00-\\u9fa5]{2,16}$", "昵称为2-16位, 由汉字或字母组成"),
    Password("^(?=.*[a-zA-Z].*)(?=.*[0-9].*)[a-zA-Z0-9-*/+.~!@#$%^&*()]{6,}$", "密码至少6位, 由数字和字母组成(可包含特殊符号)"),
    Telephone("^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", "手机号码格式不正确"),
    Identity("^[1-8]{2}[0-9]{4}[0-9]{4}((0[1-9]{1})|(1[0-2]{1}))((0[1-9]{1})|(1[0-9]{1})|(2[0-9]{1})|(3[0-1]{1}))[0-9]{3}[0-9xX]{1}$", "身份证格式不正确"),
    Boolean("^(true|false)$", "布尔值格式不正确"),
    /**
     * 系统所需正则
     */
    DirName("^[^\\/:*?\"<>|]{1,20}$", "文件夹名称为1-20位, 不可包含特殊字符【\\/:*?\"<>|】"),
    DirPower("^(private|public|common)$", "文件夹权限值格式不正确"),
    FileName("^[^\\/:*?\"<>|]{1,26}\\.([a-zA-Z]{2,5})$", "文件名称为1-26位, 不可包含特殊字符【\\/:*?\"<>|】;后缀长度为2-5位, 由字母组成"),
    MdFileName("^[^\\/:*?\"<>|]{1,26}\\.md$", "文件名称为1-26位, 不可包含特殊字符【\\/:*?\"<>|】;后缀必须为.md"),
    NoticeTitle("^[\\s\\S]{1,20}$", "公告标题为1-20词组成"),
    NoticeContent("^[\\s\\S]{10,1024}$", "公告内容为10-1024词组成"),
    Ipv4("^((2((5[0-5])|([0-4]\\d)))|([0-1]?\\d{1,2}))(\\.((2((5[0-5])|([0-4]\\d)))|([0-1]?\\d{1,2}))){3}$", "IP格式不正确"),
    AuthorityName("^[a-zA-Z\\u4e00-\\u9fa5]{2,20}$", "权限名称由汉字或字母组成, 长度在2-20之间"),
    AuthorityKey("^[a-z:]{2,30}$", "权限标识只能是小写字母和英文冒号, 长度在2-30之间"),
    ConfigName("^[a-zA-Z\\u4e00-\\u9fa5]{2,20}$", "配置名称由汉字或字母组成, 长度在2-20之间"),
    ConfigKey("^[a-z.]{1,128}$", "配置键名只能是小写字母和点(.)组成, 长度在1-128之间"),
    ;

    private final String regular;
    private final String message;

    MatchingMode(String regular, String message) {
        this.regular = regular;
        this.message = message;
    }
}
